﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Program
    {
        public static Dictionary<int, Student> list = new Dictionary<int, Student>();
        static void Main(string[] args)
        {
            //添加3个类，分别实现 IComparer<T>接口，实现对Student类的三个字段的排序。
            //1、学生类：学号、姓名、年龄
            //2、请选择：1)、添加学生信息。2)、查询学生信息，3)、删除学生信息。
            //3、重复的学号不能添加。
            //4、查询学生信息功能中有：1)、查询所有（按学号排序）2)、查询所有（按姓名排序），
            //3)、查询所有（按年龄排序）4)、按学号查询（查没有，则打印查无此学生）5)、退出
            List<Student> list = new List<Student>();
            Console.WriteLine("----------学生信息----------");
            
            while (true)
            {
                Console.WriteLine("请选择：1)、添加学生信息。2)、查询学生信息，3)、删除学生信息,4)、退出！");
                int k = int.Parse(Console.ReadLine());
                switch (k)
                {
                    case 1://添加学生信息

                        AddInfo();

                        break;
                    case 2://查询学生信息

                        InquireInfo();

                        break;
                    case 3://删除学生信息

                        DeleteInfo();

                        break;
                    case 4://退出

                        Console.WriteLine("退出成功！");

                        break;
                    default:
                        Console.WriteLine("输入的形式有误！");
                        break;
                }
            }
        }
        static void AddInfo()
        {
            Console.WriteLine("请输入要添加的学生学号：");
            int number = int.Parse(Console.ReadLine());
            for (int i = 0; i < list.Count; i++)
            {
                if (list.ContainsKey(number))
                {
                    Console.WriteLine("学号重复,不能添加！请重新输入学生学号：");
                    AddInfo();
                }
            }
            Console.WriteLine("请输入要添加的学生姓名：");
            string name = Console.ReadLine();
            Console.WriteLine("请输入要添加的学生年龄：");
            int age = int.Parse(Console.ReadLine());
            Student stu = new Student(number, name, age);
            list.Add(number,stu);
            Console.WriteLine("添加完成！");
           
        }
        static void InquireInfo()
        {
            Console.WriteLine("请输入：1)、查询所有（按学号排序）2)、查询所有（按姓名排序），3)、查询所有（按年龄排序）4)、按学号查询（查没有，则打印查无此学生）5)、退出");
            int k = int.Parse(Console.ReadLine());
            switch (k)
            {
                case 1:
                    InquirenNumber();
                    break;
                case 2:
                    InquireName();
                    break;
                case 3:
                    InquireAge();
                    break;
                case 4:
                    Number();
                    break;
                case 5:
                    Console.WriteLine("退出成功！");
                    break;
                default:
                    Console.WriteLine("输入的形式有误！");
                    break;
            }
        }
        static void InquirenNumber()
        {
            List<Student> list1 = new List<Student>();
            foreach (var v in list.Values)
            {
                list1.Add(v);
            }
            list1.Sort(new SortNumber());
            foreach (var v in list1)
            {
                Console.WriteLine(v);
            }
        }
        static void InquireName()
        {
            List<Student> list1 = new List<Student>();
            foreach (var v in list.Values)
            {
                list1.Add(v);
            }
            list1.Sort(new SortName());
            foreach (var v in list1)
            {
                Console.WriteLine(v);
            }
        }
        static void InquireAge()
        {
            List<Student> list1 = new List<Student>();
            foreach (var v in list.Values)
            {
                list1.Add(v);
            }
            list1.Sort(new SortAge());
            foreach (var v in list1)
            {
                Console.WriteLine(v);
            }
        }
        static void Number()
        {
            Console.WriteLine("请输入学生的学号：");
            int number = int.Parse(Console.ReadLine());
            for (int i = 0; i < list.Count; i++)
            {
                if (list.ContainsKey(number))
                {
                    Console.WriteLine(list[number]);
                }
                else
                {
                    Console.WriteLine("查无此学生！请重新输入学生的学号:");
                    Number();
                }
            }
        }
        static void DeleteInfo()
        {
            Console.WriteLine("请输入要删除的学生学号:");
            int number = int.Parse(Console.ReadLine());
            for (int i = 0; i < list.Count; i++)
            {
                if (list.ContainsKey(number))
                {
                    list.Remove(number);
                }
            }
            Console.WriteLine("删除完成！");
        }
        class SortAge : IComparer<Student>
        {
            public int Compare(Student x, Student y)
            {
                return x.age.CompareTo(y.age);
            }
        }
        class SortName : IComparer<Student>
        {
            public int Compare(Student x, Student y)
            {
                return x.name.CompareTo(y.name);
            }
        }
        class SortNumber : IComparer<Student>
        {
            public int Compare(Student x, Student y)
            {
                return x.number.CompareTo(y.number);
            }
        }
    }
}